Machine-readable optical representations of data are an intrinsic part of modern life. For example, barcodes, which store data in one dimension, are ubiquitous in retail where they are used to store product and price information and to track inventory, allowing for a speedy transaction. More recently, various types of matrix codes, the most common being the QR code, have been developed. Like barcodes, matrix codes store data as an optical representation. However, matrix codes store data in two dimensions, resulting in what generally appears as a grid of black and white squares, though implementations using other shapes and colors have been developed.
While optical representations of data such as the QR code are easy to display and read, they suffer from a limited data capacity. For example, a QR code implementing Version 40 of the QR standard and using the lowest possible error correction, since higher error correction further limits the code's data capacity, is capable of storing only 4,296 alphanumeric characters. Of course, QR codes and the like are not limited to storing alphanumeric characters, but capacity is further limited when more complex data types are stored. For example, a QR code with the same specifications as above could store only 1,817 Japanese characters.
Theoretically, one could design a matrix code with an arbitrarily high capacity by increasing its physical size and resolution. In practice, however, the size of a matrix code is limited by its display medium, which may often be no more than the corner of a small piece of paper. Furthermore, the resolution of a matrix code is limited by, among other things, the need to be easily readable by a variety of devices, such as smartphone cameras. For example, if the resolution of a matrix code is too high, its data-containing elements (e.g., squares, in the case of a QR code) may be too small to be correctly captured by a smartphone camera or other reading device.